#ifndef MONITOR_NEW_EXECUTOR_SYSTEM_FILE_EXECUTOR_H_
#define MONITOR_NEW_EXECUTOR_SYSTEM_FILE_EXECUTOR_H_

#include <atomic>
#include <future>
#include <memory>
#include <string>
#include <vector>
#include <thread>

// 添加必要的包含
#include "build/proto_src/config.pb.h"
#include "build/proto_src/system_info.pb.h"
#include "core/monitor_queue.h"
#include "parser/system_file_parser.h"

namespace sysinfo {
namespace monitor {

using CommandConfigs = google::protobuf::RepeatedPtrField<CommandConfig>;

class SystemFileExecutor {
 public:
  // 与老项目保持一致，明确区分有界队列和循环队列参数类型
  explicit SystemFileExecutor(const CommandConfigs& file_configs,
                              BoundedMonitorQueue<SystemInfoProto>& system_info_queue);
                              
  virtual ~SystemFileExecutor();

  // 禁用拷贝和移动
  SystemFileExecutor(const SystemFileExecutor&) = delete;
  SystemFileExecutor& operator=(const SystemFileExecutor&) = delete;

  /**
   * @brief 初始化命令工具
   */
  void Init();

  /**
   * @brief 启动持续监控的系统文件读取
   */
  void Start();

  /**
   * @brief 停止所有运行中的任务
   */
  void Stop();

 private:
  void CollectSystemFile(const CommandConfig& file_config);
  void ParseSystemFile(const CommandConfig& file_config,
                       const std::string& output);

 private:
  // 配置和队列
  CommandConfigs file_configs_;
  
  // 外部传入
  // 用于存储解析之后的性能数据，即 SystemInfoProto
  BoundedMonitorQueue<SystemInfoProto>& system_info_queue_;
  
  // 解析器
  std::unique_ptr<SystemFileParser> parser_;

  // 运行控制标志
  std::atomic<bool> run_ctrl_{false};
  std::atomic<bool> non_reentrant_stop_{false};  // 防止多次析构的标志

  // 线程池
  std::vector<std::future<void>> collection_futures_;
};

}  // namespace monitor
}  // namespace sysinfo

#endif  // MONITOR_NEW_EXECUTOR_SYSTEM_FILE_EXECUTOR_H_